#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

typedef long long ll;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    // 输入线段数量 n，线段长度 m，以及矩形长宽差值 k
    ll n, m, k;
    cin >> n >> m >> k;

    // 输入每条线段的横坐标 a[i]
    vector<ll> a(n);
    for (int i = 0; i < n; ++i)
    {
        cin >> a[i];
    }

    // 预处理前缀和数组 prefix_sum 和平方前缀和数组 prefix_sum_sq
    vector<ll> prefix_sum(n + 1, 0);
    vector<ll> prefix_sum_sq(n + 1, 0);
    for (int i = 0; i < n; ++i)
    {
        prefix_sum[i + 1] = prefix_sum[i] + a[i];              // 计算前缀和
        prefix_sum_sq[i + 1] = prefix_sum_sq[i] + a[i] * a[i]; // 计算平方前缀和
    }

    ll ans = 0;       // 初始化答案
    ll C = m + k + 1; // 定义常数 C，用于后续计算

    // 遍历每条线段 j
    for (int j = 0; j < n; ++j)
    {
        ll current = a[j]; // 当前线段的横坐标

        // 使用二分查找确定 i_low：最大的 i，满足 current - a[i] >= k + 1
        // 即 a[i] <= current - (k + 1)
        ll left = 0, right = j;
        ll i_low = -1;
        while (left <= right)
        {
            ll mid = (left + right) / 2;
            if (current - a[mid] >= k + 1)
            {
                i_low = mid; // 更新 i_low
                left = mid + 1;
            }
            else
            {
                right = mid - 1;
            }
        }
        if (i_low == -1)
            continue; // 如果没有满足条件的 i，跳过当前 j

        // 使用二分查找确定 i_high：最小的 i，满足 current - a[i] <= k + m
        // 即 a[i] >= current - (k + m)
        left = 0;
        right = j;
        ll i_high = j + 1;
        while (left <= right)
        {
            ll mid = (left + right) / 2;
            if (a[mid] >= current - (k + m))
            {
                i_high = mid; // 更新 i_high
                right = mid - 1;
            }
            else
            {
                left = mid + 1;
            }
        }
        if (i_high > i_low)
            continue; // 如果 i_high > i_low，跳过当前 j

        // 计算满足条件的区间 [i_high, i_low] 的线段数量 cnt
        ll cnt = i_low - i_high + 1;

        // 计算区间 [i_high, i_low] 的 a[i] 的和 sum_ai 和平方和 sum_ai_sq
        ll sum_ai = prefix_sum[i_low + 1] - prefix_sum[i_high];
        ll sum_ai_sq = prefix_sum_sq[i_low + 1] - prefix_sum_sq[i_high];

        // 计算 d = current - a[i] 的和 sum_d 和平方和 sum_d_sq
        ll sum_d = current * cnt - sum_ai;
        ll sum_d_sq = current * current * cnt - 2 * current * sum_ai + sum_ai_sq;

        // 根据公式计算当前 j 的贡献，并累加到答案 ans 中
        ans += C * C * cnt - 2 * C * sum_d + sum_d_sq;
    }

    // 输出最终答案
    cout << ans << endl;

    return 0;
}